#include<cstdio>
#include<algorithm>
#include<iostream>
#define rep(i,l,r) for (i=l; i<=r; i++)
#define L c[x][0]
#define R c[x][1]
#define key c[c[rt][1]][0]
using namespace std;

const int N=2000100,inf=1000000000;
int cnt,rt,x,n,pos=1,c[N][2],s[N],rev[N],f[N];
char v[N],ch[N],op[20];

void get(int &x,char ch,int fa){ x=++cnt; v[x]=ch; f[x]=fa; L=R=rev[x]=0; s[x]=1; }
void upd(int x){ if (x) s[x]=s[L]+s[R]+1; }
void make(int x){ if (x) rev[x]^=1,swap(L,R); }
void push(int x){ if (x && rev[x]) make(L),make(R),rev[x]=0; }

void rot(int &rt,int x){
    int y=f[x],z=f[y],p=(c[y][1]==x),q=p^1;
    if (y==rt) rt=x; else c[z][c[z][1]==y]=x;
    f[x]=z; f[y]=x; f[c[x][q]]=y; c[y][p]=c[x][q]; c[x][q]=y;
    upd(y);
}

void splay(int &rt,int x){
    while (x!=rt){
        int y=f[x],z=f[y];
        if (y!=rt)
            { if ((c[z][0]==y) ^ (c[y][0]==x)) rot(rt,x); else rot(rt,y); }
        rot(rt,x);
    }
    upd(x);
}

int find(int x,int k){
    push(x);
    if (s[L]+1==k) return x;
    else return (s[L]>=k) ? find(L,k) : find(R,k-s[L]-1);
}

inline void split(int l,int r){ int x=find(rt,l-1),y=find(rt,r+1); splay(rt,x); splay(c[rt][1],y); }

void insert(int &k,int l,int r,int fa){
    int mid=(l+r)>>1; get(k,ch[mid],fa);
    if (l<mid) insert(c[k][0],l,mid-1,k);
    if (mid<r) insert(c[k][1],mid+1,r,k);
    upd(k);
}

void ins(){
    scanf("%d%*c",&x); gets(ch); split(pos+1,pos);
    insert(key,0,x-1,c[rt][1]); upd(c[rt][1]); upd(rt);
}

void del(){ scanf("%d",&x); split(pos+1,pos+x); f[key]=0; key=0; upd(c[rt][1]); upd(rt); }
void reverse(){ scanf("%d",&x); split(pos+1,pos+x); make(key); }

int main(){
    get(rt,'*',0); get(c[rt][1],'*',rt); upd(rt);
    for (scanf("%d",&n); n--; ){
        scanf("%s",op);
        if (op[0]=='M') scanf("%d",&x),pos=x+1;
        if (op[0]=='I') ins();
        if (op[0]=='D') del();
        if (op[0]=='R') reverse();
        if (op[0]=='G') printf("%c\n",v[find(rt,pos+1)]);
        if (op[0]=='P') pos--;
        if (op[0]=='N') pos++;
    }
    return 0;
}